package pe.com.cruzdelsur.aplicacion;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import org.primefaces.event.SelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;

import pe.com.cruzdelsur.dominio.Actividad;
import pe.com.cruzdelsur.servicios.ActividadService;
import pe.com.cruzdelsur.util.Util;


@ManagedBean(name="actividadController")
@SessionScoped
public class ActividadController implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private static final String SUCCESS = "successActividad";
	private static final String ERROR = "error";
	private static final String ACTIVIDAD = "actividad";
	


	@ManagedProperty(value="#{ActividadServiceImpl}")
	ActividadService actividadService;
	
	List<ActividadDTO> listaActividadesDTO;
	
	private String actividadId;
	private String descripcion;
	private ActividadDTO actividadDTO;
	
	@PostConstruct
	public void init(){
		listaActividadesDTO = new ArrayList<ActividadDTO>();
		cargarListarActividades();
		actividadDTO=new ActividadDTO();
	}

	public void open(){
		
		Util.sendRedirect("pages/actividad.jsf");
		
	}
	public String getActividadId() {
		return actividadId;
	}
	public void setActividadId(String actividadId) {
		this.actividadId = actividadId;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}


	public String insertar(){
		try {
			Actividad actividad = new Actividad();
			actividad.setDescripcion(actividadDTO.getDescripcion());
			actividad.setClasificacion(Util.generarAleatorio());
			actividadService.insertar(actividad);
			cargarListarActividades();
			reset();
			return ACTIVIDAD;		
		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		return ERROR;
	}
	
	public void reset(){
		
		actividadId=null;
		descripcion=null;
		
		actividadDTO= new ActividadDTO();
	}
	public ActividadService getActividadService() {
		return actividadService;
	}
	public void setActividadService(ActividadService actividadService) {
		this.actividadService = actividadService;
	}
	
	public void cargarListarActividades(){
		try {
			listaActividadesDTO.clear();
			List<Actividad> listaActividades=actividadService.listar();
			ActividadDTO actividadDTO;
			for (Actividad actividad :listaActividades){
				actividadDTO=new ActividadDTO();
				actividadDTO.setActividadId(String.valueOf(actividad.getActividadId()));
				actividadDTO.setDescripcion(actividad.getDescripcion());
				listaActividadesDTO.add(actividadDTO);
			}
		} catch (DataAccessException e) {
			e.printStackTrace();
		}
	}

	public void onRowSelect(SelectEvent event){
		actividadDTO = ((ActividadDTO) event.getObject());
	}
		
		
	
	public String eliminar(){
		try {
		if (actividadDTO.getActividadId() != null && !actividadDTO.getActividadId().equals("")) {
			actividadService.eliminar(actividadService.obtener(Integer.valueOf(actividadDTO.getActividadId())));
			cargarListarActividades();
				reset();
				return ACTIVIDAD;
			}

		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		return ERROR;
	}
	
	public String actualizar(){
		try {
			if (actividadDTO.getActividadId() != null && !actividadDTO.getActividadId().equals("")) {
				Actividad actividad=actividadService.obtener(Integer.valueOf(actividadDTO.getActividadId()));
				actividad.setDescripcion(actividadDTO.getDescripcion());
				actividadService.actualizar(actividad);
				
				cargarListarActividades();
				reset();
				return ACTIVIDAD;
			}

		} catch (DataAccessException e) {
			e.printStackTrace();
		}
		return ERROR;
	}
	
	public void buscar(){
		try {
			if (descripcion != null && !descripcion.equals("")) {
				Actividad actividad = actividadService.buscarPorDescripcionIgual(descripcion);
				if (actividad!=null){
					actividadDTO=new ActividadDTO();
					actividadDTO.setActividadId(String.valueOf(actividad.getActividadId()));
					actividadDTO.setDescripcion(actividad.getDescripcion());
				}
			}

		} catch (DataAccessException e) {
			e.printStackTrace();
		}
	}

	public ActividadDTO getActividadDTO() {
		return actividadDTO;
	}

	public void setActividadDTO(ActividadDTO actividadDTO) {
		this.actividadDTO = actividadDTO;
	}

	public List<ActividadDTO> getListaActividadesDTO() {
		return listaActividadesDTO;
	}

	public void setListaActividadesDTO(List<ActividadDTO> listaActividadesDTO) {
		this.listaActividadesDTO = listaActividadesDTO;
	}


	
	
	
}
		
	
